NIUHE

日々私たちが过ごしている日常というのは、実は奇迹の连続なのかもしれんな

Paper Reading - Stacked Attention Networks for Image QA

Zichao Yang, Xiaodong He, Jianfeng Gao , Li Deng , Alex Smola Stacked Attention Networks for Image Question Answering

这篇文章发表在CVPR2016,作者把 attention 机制应用在 Visual QA,不但能理解神经网络生成答案的 multiple resoning,而且获得了当时最好的效果。

SAN总共由三部分组成:

  • Image Model:用来编码图片信息
  • Question Moel:用来编码问题信息
  • Stacked Attention Networks:通过多层 attention layer 不断优化对问题的编码

Image Model

Image model 使用 VGGNet 处理源图片,用最后一个池化层作为提取的图片特征: \[ f_I = CNN_{vgg}(I) \] 把输入图片转化为 \(448 \times 448\) 大小, 输出的特征即为 \(512 \times 14 \times 14\),其中 \(512\) 为特征向量(feature vector) \(f_i\) 的维度,\(14 \times 14\) 是区域(特征向量)的个数,每个特征向量 \(f_i\) 代表源图片中 \(32 \times 32\) 大小的区域。

为了后面方便处理,通过一个线性层把图片特征转化为和问题特征一样的维度: \[ v_I = \tanh(W_If_I + b_I) \] 其中,\(v_I\) 是个矩阵,它的第 \(i\)\(v_i\) 是区域 \(i\) 的特征向量(feature vector)。

Question Model

作者采用了两种模型对问题进行编码,分别基于 LSTM 和 CNN。

LSTM based question model

基于 LSTM 的模型很简单,就是用一个普通的 LSTM 对问题进行编码(没准扩展成bi-LSTM效果会更好一些),每个时刻处理一个词,把最后一个词对应的 hidden state 作为编码结果: \[ \begin{alignat}{3} x_t &= W_eq_t, \ t\in\{1, 2, ... T\} \\ h_t &= LSTM(x_t), \ t\in\{1, 2, ... T\}\\ v_Q &= h_T \end{alignat} \] 其中, \(q_t\) 为词的 one-hot encoding,\(W_e\) 为 embedding 矩阵,\(x_t\) 就为词的 word embedding(总觉得这样的词编码太简单了),\(v_Q\) 为对问题的编码。

CNN based question model

这应该算是CNN的一个变种,它的 filter 有三种,分别为 unigram, bigram, trigram,分别对应窗口大小 \(c = 1, 2, 3\)。定义符号 \(x_{i:j}\)\(x_i, x_{i+1}, …, x_j\) 的连接,所以问题向量可表示为: \[ x_{1:T} = [x1, x2, ..., x_T] \]

然后对每一个 filter 分别在 \(x_{1:T}\) 上进行卷积操作,第 \(t\) 次卷积操作的输出为: \[ h_{c,t} = \tanh(W_cx_{t:t+c-1}+b_c) \] 窗口大小为 \(c\) 的 feature map 为: \[ h_c = [h_{c,1}, h_{c,2}, ..., h_{c,T-c+1}] \] 然后对每个 feature map 进行 max pooling,得到最终的问题特征: \[ \hat{h}_c = \max_t(h_{c,1}, h_{c, 2} ..., h_{c,T-c+1}) \]

\[ v_Q = h = [\hat{h}_1,\hat{h}_2,\hat{h}_3] \]

Stacked Attention Networks

第一层 attention network

首先根据图像特征矩阵 \(v_I\) 和问题特征向量 \(v_Q\) 计算 attention map: \[ \begin{alignat}{3} h_A &= \tanh(W_{I,A}v_I\oplus (W_{Q,A}v_Q+b_A))\\ p_I &= softmax(W_Ph_A+b_P) \end{alignat} \] 其中,\(v_I\in R^{d\times m}\), \(d\) 是图像特征的维度,\(m\) 是图像区域个数;\(v_Q \in R^d\)\(W_{I, A}, W_{Q,A} \in R^{k \times d}\)\(b_A \in R^{k}\);定义 \(\oplus\) 为矩阵和向量的加法,其运算规则为矩阵的每一列分别和该向量相加,所以 \(h_A \in R^{k\times m}\)\(W_P \in R^{1\times k}, b_P\in R^{1\times m}\)\(p_I \in R^{1\times m}\) 为 attention vector,它每一项都是一个概率,表示该问题的答案所在某个区域的概率,或者说问了回答这个问题,注意力应该集中在哪里。

之后用 attention vector 计算 图像特征的加权和,然后与问题特征相加,得到优化的问题特征\[ \begin{alignat}{3} \widehat{v}_I &= \sum_ip_iv_i \\ u &= \hat{v}_I+v_Q \end{alignat} \] 后面的每层 attention network 结构都是一样的,区别在于不再使用原始的问题特征 \(v_Q\),而是用优化后的 \(u\):

第 k 层 attention network \[ \begin{alignat}{3} h_A^k &= \tanh(W_{I,A}^kv_I\oplus (W_{Q,A}^ku_{k-1}+b_A^k))\\ p_I^k &= softmax(W_P^kh_A^k+b_P^k)\\ \widehat{v}_I^k &= \sum_ip_i^kv_i \\ u^k &= \hat{v}_I^k+u^{k-1} \end{alignat} \] 作者通过实验发现,第一层 attention 可以识别问题中出现的实体,第二层则可以消除无关的,只关心与答案相关的实体,多加几层对识别效果没有明显提升。

输出层

由于输出只是一个词,所以可以转化为分类问题,在所有候选答案里挑一个词出来: \[ p_{ans} = softmax(W_uu^K+b_u) \] 其中 \(K\) 为 attention 的层数。

可视化 Attention Layer

  • 正确结果

  • 错误结果

总结

这篇文章的主要工作在于把 attention 机制应用在 Visual QA 问题中,效果卓群,可解释性强。但也有可改进的地方,如图片编码选择 ResNet 而不是 VGGNet;问题的 word embedding 采用 word2vec;对问题的编码采用 bi-LSTM 等,也许会进一步提高整体的表现。

Powered by Hexo and Theme by Hacker
© 2019 NIUHE